﻿// 定义 C++ 关键字列表
const cppKeywords: string[] = [
    "alignas", "alignof", "and", "and_eq", "asm", "atomic_cancel", "atomic_commit", "atomic_noexcept",
    "auto", "bitand", "bitor", "bool", "break", "case", "catch", "char", "char8_t", "char16_t",
    "char32_t", "class", "compl", "concept", "const", "consteval", "constexpr", "constinit",
    "const_cast", "continue", "co_await", "co_return", "co_yield", "decltype", "default",
    "delete", "do", "double", "dynamic_cast", "else", "enum", "explicit", "export", "extern",
    "false", "float", "for", "friend", "goto", "if", "inline", "int", "long", "mutable",
    "namespace", "new", "noexcept", "not", "not_eq", "nullptr", "operator", "or", "or_eq",
    "private", "protected", "public", "reflexpr", "register", "reinterpret_cast", "requires",
    "return", "short", "signed", "sizeof", "static", "static_assert", "static_cast", "struct",
    "switch", "synchronized", "template", "this", "thread_local", "throw", "true", "try",
    "typedef", "typeid", "typename", "union", "unsigned", "using", "virtual", "void",
    "volatile", "wchar_t", "while", "xor", "xor_eq"
];

export function isValidCppClassName(name: string): boolean {
    // 检查是否为空字符串
    if (name.length === 0) {
        return false;
    }

    // 检查是否以数字开头
    if (/^\d/.test(name)) {
        return false;
    }

    // 检查是否只包含字母、数字和下划线
    if (!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(name)) {
        return false;
    }

    // 检查是否为 C++ 关键字
    if (cppKeywords.includes(name)) {
        return false;
    }

    return true;
}

// 测试示例
